#ifndef XGP_STUDY_DEMO43_MYLINKLIST_H
#define XGP_STUDY_DEMO43_MYLINKLIST_H

#include <iostream>
using namespace std;

typedef void(*PRINTLINKNODE)(void*);

template <class T>
class MyLinkNode {
public:
        T* data;     //存放T类型的数据
        MyLinkNode* next;    //下一个结点
};

template <class T>
class MyLinkList {
    private:
        MyLinkNode<T>* head;     //头节点
        int size;   //大小
    public:

    //初始化链表
        MyLinkList Init_LinkList();
    //插入错作
        void Insert_LinkList(int pos,T* data);
    //头插法建立整数型单链表
        MyLinkList List_HeadInsert(int size);
    //尾插法
        MyLinkList List_TailInsert(int size);
    //按序号查找
        MyLinkNode<T> getElem(int pos);
    //按值查找
        int Find_LinkList(T data);
    //删除指定位置的值
        void RemoveByPos_LinkList(int pos);
    //获得链表的长度
        int Size_LinkList();
    //释放链表内存
        void FreeSpace_LinkList();
    //打印
        void Print_LinkList(PRINTLINKNODE print);

};

#endif //XGP_STUDY_DEMO43_MYLINKLIST_H
